﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Demo3
{

    /*二、创建一个Shape（形状）类，此类包含一个名为color的数据成员，用于存储颜色，
     * 这个类还包含一个名为GetArea()的虚方法（这个方法是用来获取形状面积的）。
    基于这个Shape，创建两个子类：Circle（圆形类）和Square（正方形类），Circle类中包含radius（半径）的数据成员，
    Square类中包含sideLen（边长）的数据成员，这两个子类都去重写父类的GetArea()方法，各自去实现计算自己的面积。

    在主类中添加一个方法，参数类型就是Shape，方法体中，用形参去调用GetArea()方法。
    main方法中去测试这个方法。*/
    class Program3
    {
        static void Main(string[] args)
        {
            Shape c = new Circle(3.1,"红");
            Shape s = new Square(2,"红");
            Console.WriteLine($"圆的面积：{MyTest(c)}");
            Console.WriteLine($"正方形的面积：{MyTest(s)}");
        }
        static double MyTest(Shape s)
        {
            return s.GetArea();
        }
    }
    class Shape
    {
        private string color;

        public string Color { get => color; set => color = value; }

        public Shape(string color)
        {
            this.color = color;
        }
        public Shape()
        {

        }

        public virtual double GetArea()
        {
            return 0;
        }
    }

    class Circle : Shape
    {
        private double radius;

        public double Radius { get => radius; set => radius = value; }

        public Circle(double radius,string color) : base(color)
        {
            this.radius = radius;
        }

        public override double GetArea()
        {
            return 3.14 * radius * radius;
        }
    }
    class Square : Shape
    {
        private double sideLen;
        public double SideLen { get => sideLen; set => sideLen = value; }

        public Square(double sideLen,string color) : base(color)
        {
            this.sideLen = sideLen;
        }

        public override double GetArea()
        {
            return sideLen * sideLen;
        }
    }
}
